#ifndef VROUTE_DATA_IN_OUTTER_HPP_3
#define VROUTE_DATA_IN_OUTTER_HPP_3

#include "vroute_Ifilters.hpp"

namespace vroute_stack
{
    class CFltOutDisp;
    class CDataInOutter
    {
    public:
        virtual int dataIn(char* content, int len, int socketIndex);
        virtual int init();
        static CDataInOutter* getInstance();        

        static void releaseInstance()
        {
            if (nullptr != _instance)
            {
                delete _instance;
                _instance = nullptr;
            }
        }

    protected:
        IFilter* m_flt_auth;
        IFilter* m_flt_route;
        IFilter* m_flt_unique;
        IFilter* m_flt_dispatch;
        IFilter* m_flt_memory;
        IFilter* m_flt_server;
        CFltOutDisp* m_flt_out;
        static CDataInOutter* _instance;
    protected:
        CDataInOutter();
        ~CDataInOutter();
    };
}
#endif //VROUTE_DATA_IN_OUTTER_HPP_3